#!/usr/bin/tclsh

proc range { min max } {
	if { $min>$max } {
		return -code error -errorInfo "\"from\" and \"to\" should be a integers"
	}
	set delta [ expr $max - $min ]
	if { $delta == 0 } {
		return [ tuple $min ]
	} elseif { $delta == 1 } {
		return [ tuple $min $max ]
	} elseif { $delta == 2 } {
		return [ tuple $min [ expr $min + 1 ] $max ]
	} elseif { $delta == 3 } {
		return [ tuple $min [ expr $min + 1 ] [ expr $max - 1 ] $max ]
	} elseif { $delta < 10 } {
		return [ tuple $min [ pure range [ expr $min + 1 ] [ expr $max - 1 ] ] $max ]
	} else {
		set median [ expr $min + $delta / 2 ]
		return [ tuple $min [ pure range [ expr $min + 1 ] $median ] [ pure range [ expr $median + 1 ] [ expr $max - 1 ] ] $max ]
	}
}
#puts [ range 1 1 ]
#puts [ range 1 5 ]
#puts [ range 1 10 ]
